home *** CD-ROM | disk | FTP | other *** search
- #include <clib/exec_protos.h>
- #include <clib/dos_protos.h>
- #include <exec/exec.h>
- #include <dos/dos.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "ZeladorAREXXinterface.h"
-
- /* variáveis desse trecho.. */
- /* long int CodRetorno; código de retorno do último comando Execute (....) */
- char *pEnvVariavel; /* usado p/ armazenar código de retorno do rexx */
- /* anteriormente definido como 10 */
- #define tamanhoEnvVariavel 256
- #define CodRetornoNulo 65535
- #define StrCodRetornoNulo "65535"
- char NomeEnvVariavel[30]; /* nome da variavel que irá armazenar o valor acima */
-
- /* 0 - ok <>0 - erro. não inicializado. */
- int InicializaREXX (void)
- {
- /* ATENCAO -- aqui deveria gerar um ID único (caso se rode 2x Zelador) */
- /* chuncho temporário */
- strcpy (NomeEnvVariavel, "ZEL_00000000"); /* <--- aqui o chuncho */
- if (!(pEnvVariavel = AllocVec (tamanhoEnvVariavel, MEMF_PUBLIC)))
- return(1);
-
- /* CodRetorno = 0; (agora não é mais uma variável normal C) */
- strcpy (pEnvVariavel, "0");
- SetVar (NomeEnvVariavel, pEnvVariavel, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
-
- return (0);
- }
-
- void EnviaComandoREXX (char * HostDestino, char * Comando)
- {
- char frasetemp [255] = "run >NIL: execute >NIL: scrp \"";
-
- /* equivalente ao rexx: "ADDRESS command setenv ZEL_xxxxxxxx 65536" */
- strcpy (pEnvVariavel, StrCodRetornoNulo);
- SetVar (NomeEnvVariavel, pEnvVariavel, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
-
- strcat (&frasetemp[0], &NomeEnvVariavel[0]); /* ZEL_xxxxxxxx */
- strcat (&frasetemp[0], "\" \"ADDRESS ");
- strcat (&frasetemp[0], HostDestino);
- strcat (&frasetemp[0], " ");
- strcat (&frasetemp[0], Comando);
- strcat (&frasetemp[0], ";exit RC\"");
-
- system (&frasetemp[0]);
- }
-
- /* usado pelo
- int VerificaSeProgsNaMem (void)
- no Zelador_Nucleo.c */
- long int EnviaEEsperaComandoREXX (char * HostDestino, char * Comando)
- {
- char frasetemp [255] = "execute >NIL: scrp \"";
-
- /* equivalente ao rexx: "ADDRESS command setenv ZEL_xxxxxxxx 65536" */
- strcpy (pEnvVariavel, StrCodRetornoNulo);
- SetVar (NomeEnvVariavel, pEnvVariavel, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
-
- strcat (&frasetemp[0], &NomeEnvVariavel[0]); /* ZEL_xxxxxxxx */
- strcat (&frasetemp[0], "\" \"ADDRESS ");
- strcat (&frasetemp[0], HostDestino);
- strcat (&frasetemp[0], " ");
- strcat (&frasetemp[0], Comando);
- strcat (&frasetemp[0], ";exit RC\"");
-
- /* printf ("Comando enviado:\n%s\n", frasetemp);*/
-
- system (&frasetemp[0]);
- return (CodRetorno());
- }
-
- /* envia comando p/o YAM e espera conclusão */
- /* dados: comando, pointer p/ string e tamanho do buffer da string */
- /* se o pointer para saida for nulo, não escreve nada de saida */
- void EnviaComandoYAM (char * Comando, char * StringSaida, int TamBuff)
- {
- char frasetemp [255] = "rx >NIL: \"OPTIONS RESULTS;";
-
- /* equivalente ao rexx: "ADDRESS command setenv ZEL_xxxxxxxx 65536" */
- strcpy (pEnvVariavel, StrCodRetornoNulo);
- SetVar (NomeEnvVariavel, pEnvVariavel, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
-
- strcat (&frasetemp[0], "ADDRESS YAM;");
- strcat (&frasetemp[0], Comando);
- strcat (&frasetemp[0], ";ADDRESS command setenv ");
- strcat (&frasetemp[0], &NomeEnvVariavel[0]); /* ZEL_xxxxxxxx */
- strcat (&frasetemp[0], " RESULT\"");
-
- system (&frasetemp[0]);
- /* return (CodRetorno());*/
-
- if (StringSaida) /* se StringSaida<>0 colocar resultado nela */
- GetVar (NomeEnvVariavel, StringSaida, TamBuff, GVF_GLOBAL_ONLY|LV_VAR);
-
- /* resseta o código de retorno, caso o comando tenha dado erro e, assim, não alterado a variável */
- strcpy (pEnvVariavel, "0");
- SetVar (NomeEnvVariavel, pEnvVariavel, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
- }
-
-
- /* retorna 65535 se o comando ainda não voltou */
- long int CodRetorno (void)
- {
- char tempEnv[tamanhoEnvVariavel];
- long int tempCodRet;
-
- /* return (CodRetorno);*/
- GetVar (NomeEnvVariavel, tempEnv, tamanhoEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
- tempCodRet = strtol (tempEnv, NULL, 10);
-
- return (tempCodRet);
- }
-
- void FechaREXX (void)
- {
- /* apaga a variável environment, não é mais necessária */
- DeleteVar (NomeEnvVariavel, GVF_GLOBAL_ONLY|LV_VAR);
- FreeVec (pEnvVariavel);
- }
-
- /* executa comando CLI dado o comando em si e espera 0-não 1-sim */
- void ExecutaComandoCLI (char * comandocli, int espera)
- {
- char frasetemp [255] = "run ";
-
- if (!(espera))
- {
- strcat (&frasetemp[0], comandocli);
- system (&frasetemp[0]);
- }
- else
- system (comandocli);
- }
-
-
-